package com.ipartek.pruebas.capitulo8;

import com.ipartek.pruebas.bean.AlumnoP8;
import com.ipartek.pruebas.excepciones.ExcepcionPersonalizadaP8;

/**
 * Calse para probar el funcionamiento del paso de parametros por referencia y
 * por valor
 * 
 * @author practicas8
 * 
 */

public class PruebaMetodosP8 {

	/**
	 * Metodo para el ejemplo de "paso por valor" el cual nos muestra por
	 * pantalla el parametro incrementando su valor
	 * 
	 * @param valor
	 *            a mostrar por pantalla
	 */
	static void incrementarValor(int valor) {
		valor++;
		System.out.println("Incrementamos en 1 la edad " + valor);
	}

	/**
	 * Metodo para el ejemplo de "paso por referencia" el cual nos muestra por
	 * pantalla la edad del alumno incrementando su valor
	 * 
	 * @param alumno
	 *            instancia de la clase AlumnoP8
	 */

	static void incrementarReferencia(AlumnoP8 alumno) {
		try {
			int edad = alumno.getEdad();
			alumno.setEdad(edad + 1);
			System.out.println(alumno.getEdad());
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/**
	 * Metodo main para probar la clase
	 * 
	 * 
	 * @param args
	 *            no vamos a pasar ningun parametro
	 * @throws ExcepcionPersonalizadaP8 
	 */
	public static void main(String[] args) throws ExcepcionPersonalizadaP8 {

		int edad = 17;
		System.out.println("Nos debe de mostrar la edad de 17= " + edad);
		incrementarValor(edad);
		// Como pasamos el parametro edad como valor, no debe cambiar su valor
		System.out.println("Nos debe de mostrar la edad de 17= " + edad);

		AlumnoP8 p = new AlumnoP8("", "", "", 17, "", "");

		System.out.println(p.toString());
		incrementarReferencia(p);
		// Como pasamos el parametro edad como referencia, debe cambiar su valor
		System.out.println(p.toString());

		// Vamos a probar a crear una variable intermedia para la instancia
		// <AlumnoP8>p

		AlumnoP8 p2 = p;
		incrementarReferencia(p);
		System.out.println(p2.toString());

		// Vamos a clonar el objeto para que no nos cambie de valor

		AlumnoP8 p3 = (AlumnoP8) p2.clone();
		incrementarReferencia(p2);
		System.out.println(p3.toString());

	}

}
